Raspberry Pi Picoで試すFuzix OS
https://scrapbox.io/files/6757b3d98bea765a1bf39040.svg
2024/12/09 Raspberry Pi Advent Calendar 2024
むとうたけし(武藤武士(wǔ téng wǔ shì)) a.k.a 610t
この記事は、Raspberry Pi Advent Calendar 2024の9日目として描かれました。
はじめに
いま、Fuzix OSが熱いです!!
なんと、Raspberry Pi Picoでもfuzixが動くということで、実際に動かしてみました。
Fuzix OSとは?
公式URL: https://www.fuzix.org/ (github)
2024/08/01現在のバージョンは0.5
色々な8bit/16bitのCPUで動くUnixのようなもの
FuzixOS: Because Small Is Beautiful
めちゃくちゃ多くの対応プラットフォーム(詳しくは、公式トップページを確認)
例: Z80(MSX), ESP8266, 6800, 8086, ARM(RP2040), PDP11, ...
出自はUZIなどなど
ライセンスは、GPL v2 + LGPL(ライブラリ部分)
100個ほどのコマンドが/binや/usr/binなどに存在
SYS3 - SYS5.x + 少しのPOSIX対応
BCPL, CC, asm, Forthなどもある
Raspberry Pi Picoで簡単にFuzix OSを試す
Fuzix on the Raspberry Pi Pico (update)で焼くだけで利用できるイメージが提供されているので、ちょこっと試してみたい場合に便利は便利です。
Raspberry Pi Pico Fuzix binaries: fuzix.tar.xz
filesystem.uf2を書き込む
バージョンは0.3.1とちょっと古い
Pico以外のハードウエア(SDなど)は不要です。
code:shell
% sudo cu -l /dev/cu.usbmodem0000000000001 -s 115200
Connected.
Current time is 23:37:29
Enter new time: 14:00:00
^ ^
n n Fuzix 0.3.1
@<
Welcome to Fuzix
m m
login: root
Welcome to FUZIX.
コマンド一覧: /usr/binは無い
code:shell
# cd /bin
# ls|wc -l
115
# for f in *
do
echo -n ${f}" "
done
ac accton at atrun banner basename bd blkdiscard cal cat chgrp chmod chown cksum cmp col comm cp cron crypt cut date dc dd decomp16 deroff df diff diff3 diffh dirname dosread du echo ed env false fdisk fforth fgrep free fsck fsck-fuzix grep head id join kill levee ll ln logname look ls makekey man marksman mesg mkdir mkfifo mkfs mknod more mount mv newgrp od pagesize passwd pg pr printenv prtroot ps ptx pwd reboot remount rev rm rmdir setdate sh sleep sort split ssh stty su sum swapon sync tail tar tee test time touch tr true tsort tty umount uniq uptime uud uue wall wc which who whoami write xargs yes
設定ファイル一覧
code:shell
# ls /etc
inittab
issue
motd
mtab
passwd
rc
termcap
Raspberry Pi Pico SDK開発環境を準備する
Fuzixをコンパイルするために、Pico C SDK(以下、SDK)をインストールします。
UbuntuからRaspberry Pi Picoを使うを参考にして、SDKをインストールします。
今回は、SDKを/opt/pico-sdkにインストールしました。
$ sudo apt install gcc cmake gcc-arm-none-eabi libnewlib-arm-none-eabi build-essential
$ cd /opt/
$ git clone -b master https://github.com/raspberrypi/pico-sdk.git
$ cd pico-sdk
$ git submodule update --init
SDKを利用するときには、以下のように環境変数PICO_SDK_PATHを定義する必要があります。
$ export PICO_SDK_PATH=/opt/pico-sdk
Fuzixのbuild方法
Pico用のFuzixには、以下の二つのバージョンがあるようです。最近はメンテナンスされていないようで、少し古い状態になっています。
https://github.com/davidgiven/FUZIX :
解説: How to get started with FUZIX on Raspberry Pi Pico
https://github.com/wiznetmaker/FUZIX : W5500対応入り
解説: How to use Ethernet in Fuzix OS with W5500 and Raspberry Pi Pico
(2024/12/11追記)
公式リポジトリ ( https://github.com/EtchedPixels/FUZIX )のソースも既にPicoに対応しています。Build手順は少しだけ違いますが後述します。
前者は手順通りにやってもうまく動かすことができませんでした。
そこで、How to use Ethernet in Fuzix OS with W5500 and Raspberry Pi Picoを参考にして、Fuzixをbuildします。
$ git clone https://github.com/wiznetmaker/FUZIX
$ cd FUZIX/Kernel/platform-rpipico/
$ make world -j
$ make image -j
(2024/12/11追記)
公式リポジトリの場合は、ディレクトリ構成が変わっているため、以下の手順になります。
$ git clone https://github.com/EtchedPixels/FUZIX
$ cd FUZIX/Kernel/platform/platform-rpipico/
$ make world -j
$ make image -j
この手順で、バージョン0.5を動かすことができました。
この手順で以下のようなファイルが生成されます。
ここで、fuzix.uf2はRaspberry Pi Picoに焼くファームウエアで、filesystem.imgはSDカード用のイメージです。ファイルシステムの作成は、How to get started with FUZIX on Raspberry Pi Picoの手順に従ってください。
SDカード無しで使う場合には、filesystem.uf2を使います。
code:files.sh
$ ls -l build/fuzix.* filesystem.*
-rwxr-xr-x 1 mutoh mutoh 73076 Dec 9 08:07 build/fuzix.bin
-rw-r--r-- 1 mutoh mutoh 1296876 Dec 9 08:07 build/fuzix.dis
-rwxr-xr-x 1 mutoh mutoh 843128 Dec 9 08:07 build/fuzix.elf
-rw-r--r-- 1 mutoh mutoh 550003 Dec 9 08:07 build/fuzix.elf.map
-rw-r--r-- 1 mutoh mutoh 205630 Dec 9 08:07 build/fuzix.hex
-rw-r--r-- 1 mutoh mutoh 146432 Dec 9 08:07 build/fuzix.uf2
-rw-r--r-- 1 mutoh mutoh 1999284 Dec 9 08:08 filesystem.elf
-rw-r--r-- 1 mutoh mutoh 1998848 Dec 9 08:08 filesystem.ftl
-rw------- 1 mutoh mutoh 1304064 Dec 9 08:08 filesystem.img
-rw-r--r-- 1 mutoh mutoh 3997696 Dec 9 08:08 filesystem.uf2
動作の様子は、以下のようになります。バージョン番号などが表示されないため、どのバージョンが動いているのかは不明です。
code:shell
% sudo cu -l /dev/cu.usbmodem0000000000001 -s 115200
Connected.
Current time is 23:09:11
Enter new time:
login: root
Welcome to FUZIX.
おわりに
Raspberry Pi Picoでfuzixを動かしてみました。
簡単に動かすには、バイナリーイメージを利用するのが楽です。
wiznetリポジトリのバージョンは、buildもでき、実際に動かすこともできました。
あなたも、Raspberry Pi Picoでfuzixしてみませんか?